Skip to content

fix(compat): an absolute DT_NEEDED is not a soname, and a missing tool is not an empty answer - #382

Merged
Sunrisepeak merged 1 commit into
mainfrom
fix/a-missing-tool-must-not-read-as-no-gaps
Sep 10, 2026
Merged

fix(compat): an absolute DT_NEEDED is not a soname, and a missing tool is not an empty answer#382
Sunrisepeak merged 1 commit into
mainfrom
fix/a-missing-tool-must-not-read-as-no-gaps

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

Two defects that only appear when compat.glx-runtime's new pass is actually executed. #380 measured the opencl and vulkan farms; the glx one had never been run.

An absolute DT_NEEDED never goes through a search path

Four members of this farm — the glvnd vendor entries libEGL_nvidia, libGLESv1_CM_nvidia, libGLESv2_nvidia, libGLX_nvidia — name /lib/x86_64-linux-gnu/... outright:

libEGL_nvidia.so.0:  /lib/x86_64-linux-gnu/libEGL_nvidia.so.0

The loader opens those directly. The farm can neither serve them nor honestly record them as unserved — and treating one as a soname looks up a name with slashes in it, then writes an unserved link whose name is a path. All three recipes now skip them.

A missing tool is not an empty answer

With readelf absent the pass returned {} — which reads exactly like "this farm has no gaps". That is the confusion this whole batch exists to remove, one layer down, in the tool lookup. It now warns, and compat.glx-runtime's lookup reaches the xim store before PATH like the other two, because this package runs on machines that were never asked to have a toolchain.

Measured

Against the installed glx farm, running the same logic:

52 members | 4 absolute entries skipped | 19 sonames needed
  filled from ecosystem payloads: 19
  unserved: 0
  path-shaped entries: none

Four come from xim:nvidia-gl-host-link, the rest from the stack xim:graphics pulls in.

…l is not an empty answer

Two defects that only appear when `compat.glx-runtime`'s new pass is actually
executed. The previous change measured the opencl and vulkan farms; the glx one
had never been run.

AN ABSOLUTE `DT_NEEDED` NEVER GOES THROUGH A SEARCH PATH. Four members of this
farm -- the glvnd vendor entries `libEGL_nvidia`, `libGLESv1_CM_nvidia`,
`libGLESv2_nvidia` and `libGLX_nvidia` -- name `/lib/x86_64-linux-gnu/...`
outright. The loader opens those directly, so the farm can neither serve them
nor honestly record them as unserved. Treating one as a soname looks up a name
with slashes in it and then writes an `unserved` link whose NAME is a path. All
three recipes skip them.

A MISSING TOOL IS NOT AN EMPTY ANSWER. With `readelf` absent the pass returned
`{}`, which reads exactly like a farm with no gaps -- the confusion this whole
batch exists to remove, one layer down in the tool lookup. It now warns, and
`compat.glx-runtime`'s lookup reaches the xim store before PATH like the other
two, because this package runs on machines that were never asked to have a
toolchain.

Measured against the installed glx farm with the same logic: 52 members, 4
absolute entries skipped, 19 sonames needed, all 19 filled from ecosystem
payloads, 0 unserved, and no path-shaped entry.
@Sunrisepeak
Sunrisepeak merged commit 12c61d0 into main Sep 10, 2026
8 checks passed
@Sunrisepeak
Sunrisepeak deleted the fix/a-missing-tool-must-not-read-as-no-gaps branch September 10, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant